﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Dominio.Commands;
using InterfazPublica;
using Dominio.Excepciones;

namespace Dominio.Logica
{
    public class ManejadorApuestas
    {
        private List<ICommand> ListaCommands;

        private Agencia Agencia;

        public ManejadorApuestas()
        {
            ListaCommands = new List<ICommand>();
            Agencia = Agencia.GetAgencia();
        }

        public void AgregarApuesta(ICommand command)
        {
            ListaCommands.Add(command);

        }

        public void EliminarApuesta(ICommand command)
        {
            ListaCommands.Remove(command);
        }

        public List<DatosApuesta> Ejecutar()
        {
            List<DatosApuesta> ListaDatosApuesta = new List<DatosApuesta>();
            foreach (ICommand ICommand in ListaCommands)
            {
                try
                {
                    DatosApuesta DatosApuesta = ICommand.Execute();
                    ListaDatosApuesta.Add(DatosApuesta);
                    Agencia.GuardarApuesta(DatosApuesta, ICommand.Juego);
                }
                catch (NullApuestaException ex)
                {
                    throw ex;
                }
            }
            ListaCommands.Clear();

            return ListaDatosApuesta;
        }

        /// <summary>
        /// Retorna la lista con la apuestas seleccionadas.
        /// </summary>
        /// <returns></returns>
        public List<ICommand> GetListaCommands() 
        {
            return ListaCommands;
        }


        public List<DatosApuesta> ObtenerListaApuestas()
        {
            List<DatosApuesta> ListaDatosApuesta = new List<DatosApuesta>();
            foreach (ICommand ICommand in ListaCommands)
            {
                try
                {
                    DatosApuesta DatosApuesta = ICommand.Execute();
                    ListaDatosApuesta.Add(DatosApuesta);
                    Agencia.GuardarApuesta(DatosApuesta, ICommand.Juego);
                }
                catch (NullApuestaException ex)
                {
                    throw ex;
                }
            }
            ListaCommands.Clear();

            return ListaDatosApuesta;
        }
    }


}
